package com.keldor.dao;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Service;

import java.lang.reflect.Array;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import com.keldor.model.Articulo;
import com.keldor.model.Familia;
import com.keldor.model.Historial;
import com.keldor.model.Usuario;
import com.keldor.model.UsuarioRol;

@Service
public class UsuarioDAOMySQLImpl extends JdbcDaoSupport  implements UsuarioDAO{

	
	@Autowired
	  public UsuarioDAOMySQLImpl(DataSource dataSource) {
	    setDataSource(dataSource);
	  }
	
	public Usuario getUsuario(int id) {
		String SQL = "select * from USUARIO where id_usuario=?";
		List <Usuario> usuario = getJdbcTemplate().query(SQL,new Object[]{id},new UsuarioMapper());
		return usuario.get(0);
	}
	
	public UsuarioRol getUsuarioRol(int id) {
		String SQL = "select * from USUARIO where id_usuario=?";
		String SQL2 = "select authority from USER_ROLES where id_usuario=?";
		List <Usuario> usuario = getJdbcTemplate().query(SQL,new Object[]{id},new UsuarioMapper());
		String rol = (String)getJdbcTemplate().queryForObject(
				SQL2, new Object[] { id }, String.class);
		return new UsuarioRol(usuario.get(0),rol);
	}

	public Usuario getUsuarioUsuario(String username) {
		String SQL = "select * from USUARIO where usuario=?";
		List <Usuario> usuario = getJdbcTemplate().query(SQL,new Object[]{username},new UsuarioMapper());
		return usuario.get(0);
	}

	public List<Usuario> getUsuarios() {
		String SQL = "select * from USUARIO ORDER BY nombre";
		return getJdbcTemplate().query(SQL,new UsuarioMapper());
	}

	public void nuevaRelRolUsuario(int id_usuario, String rol) {
		String SQL = "INSERT into USER_ROLES (id_usuario, authority) values (?,?)";
		Object[] params = new Object[] { id_usuario, rol};
		getJdbcTemplate().update(SQL, params);
	}

	public boolean existUsuario(String usuario) {
		String SQL = "select * from USUARIO where nombre=?";
		Object[] params = new Object[] { usuario};
		List <Usuario> usuarios = getJdbcTemplate().query(SQL, params, new UsuarioMapper());
		if(usuarios.size()>0){
			return true;
		} else{
			return false;
		}
	}

	public Usuario nuevoUsuario(Usuario usuario) {
		String SQL = "INSERT into USUARIO (nombre, apellido, usuario, password, enabled, id_almacen) values (?,?,?,?,?,?)";
		Object[] params = new Object[] { usuario.getNombre(), usuario.getApellido(), usuario.getUsuario(), usuario.getPassword(), usuario.getEnabled(), usuario.getId_almacen()};
		getJdbcTemplate().update(SQL, params);
		String SQL2 = "select * from USUARIO where usuario=?";
		Object[] params2 = new Object[] { usuario.getUsuario()};
		return getJdbcTemplate().queryForObject(SQL2, params2, new UsuarioMapper());
	}

	public void actualizarUsuarioRol(UsuarioRol user, int id) {
		String SQL = "UPDATE USUARIO set nombre= ?, apellido = ?, usuario = ?, password = ? where id_usuario = ?";
		Object[] params = new Object[] { user.getNombre(), user.getApellido(), user.getUsuario(), user.getPassword(), id};
		getJdbcTemplate().update(SQL, params);
		String SQL2 = "UPDATE USER_ROLES set authority = ? where id_usuario = ?";
		Object[] params2 = new Object[] {user.getRol(), id};
		getJdbcTemplate().update(SQL2, params2);
	}

	

}

	
